#ifndef _SIMPLIFICADORES_H_
#define _SIMPLIFICADORES_H_

#include "AB.h"

/*PRE: Recibe un arbol origen creado y no vacio y otro arbol destino no creado.
  POS: Devuelve el arbol origen simplificado en el arbol destino.
  Devuelve: 1 si termina sin errores.
           -1 si ocurre algun error inesperado*/
int SimplificarConstante(const TAB* origen, TAB* destino);

/*PRE: Recibe un arbol origen creado y no vacio y otro arbol destino no creado.
  POS: Devuelve el arbol origen simplificado en el arbol destino.
  Devuelve: 1 si termina sin errores.
           -1 si ocurre algun error inesperado*/
int SimplificarVariable(const TAB* origen, TAB* destino);

/*PRE: Recibe un arbol origen creado y no vacio y otro arbol destino no creado.
  POS: Devuelve el arbol origen simplificado en el arbol destino.
  Devuelve: 1 si termina sin errores.
           -1 si ocurre algun error inesperado
           -3 si encuentra alguna funcion matematica no valida.*/
int SimplificarSuma(const TAB* origen, TAB* destino);

/*PRE: Recibe un arbol origen creado y no vacio y otro arbol destino no creado.
  POS: Devuelve el arbol origen simplificado en el arbol destino.
  Devuelve: 1 si termina sin errores.
           -1 si ocurre algun error inesperado
           -3 si encuentra alguna funcion matematica no valida.*/
int SimplificarResta(const TAB* origen, TAB* destino);

/*PRE: Recibe un arbol origen creado y no vacio y otro arbol destino no creado.
  POS: Devuelve el arbol origen simplificado en el arbol destino.
  Devuelve: 1 si termina sin errores.
           -1 si ocurre algun error inesperado
           -3 si encuentra alguna funcion matematica no valida.*/
int SimplificarProducto(const TAB* origen, TAB* destino);

/*PRE: Recibe un arbol origen creado y no vacio y otro arbol destino no creado.
  POS: Devuelve el arbol origen simplificado en el arbol destino.
  Devuelve: 1 si termina sin errores.
           -1 si ocurre algun error inesperado
           -3 si encuentra alguna funcion matematica no valida.*/
int SimplificarDivision(const TAB* origen, TAB* destino);

/*PRE: Recibe un arbol origen creado y no vacio y otro arbol destino no creado.
  POS: Devuelve el arbol origen simplificado en el arbol destino.
  Devuelve: 1 si termina sin errores.
           -1 si ocurre algun error inesperado
           -3 si encuentra alguna funcion matematica no valida.*/
int SimplificarPotencia(const TAB* origen, TAB* destino);

/*PRE: Recibe un arbol origen creado y no vacio y otro arbol destino no creado.
  POS: Devuelve el arbol origen simplificado en el arbol destino.
  Devuelve: 1 si termina sin errores.
           -1 si ocurre algun error inesperado
           -3 si encuentra alguna funcion matematica no valida.*/
int SimplificarSeno(const TAB* origen, TAB* destino);

/*PRE: Recibe un arbol origen creado y no vacio y otro arbol destino no creado.
  POS: Devuelve el arbol origen simplificado en el arbol destino.
  Devuelve: 1 si termina sin errores.
           -1 si ocurre algun error inesperado
           -3 si encuentra alguna funcion matematica no valida.*/
int SimplificarCoseno(const TAB* origen, TAB* destino);

/*PRE: Recibe un arbol origen creado y no vacio y otro arbol destino no creado.
  POS: Devuelve el arbol origen simplificado en el arbol destino.
  Devuelve: 1 si termina sin errores.
           -1 si ocurre algun error inesperado
           -3 si encuentra alguna funcion matematica no valida.*/
int SimplificarLogaritmo(const TAB* origen, TAB* destino);

#endif
